package xp.ass.imitate.spring;

import org.apache.commons.logging.Log;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.boot.logging.DeferredLogFactory;
import org.springframework.core.env.ConfigurableEnvironment;
import xp.ass.imitate.config.EnvMeta;
import xp.ass.imitate.enums.EnvTypeEnum;

/**
 * @author chent3
 * @date 2024/7/17
 */


public class AssImitateConfigContextInitializer implements EnvironmentPostProcessor {

    private final Log log;



    public AssImitateConfigContextInitializer(DeferredLogFactory deferredLogFactory) {
        this.log = deferredLogFactory.getLog(AssImitateConfigContextInitializer.class);
    }

    @Override
    public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
        // 这里我们先做简单一点，就直接取 applicationName
        EnvMeta envMeta = initEnvMeta();



//        ConfigPropertySourceFactory.INSTANCE.getConfigPropertySource(envMeta,)


//        environment.getPropertySources().addFirst(null);

    }

    /**
     * iftk_todo 目前的一个问题，
     * namespace 这个肯定是应用的 jvm 启动参数来决定的
     * appid -> 这个目前就是应用的 spring.application.name
     *  但是目前这个有一个扯淡的点是：要想获取欧 spring.application.name 就需要把 yml 给解析一遍，但是 spring 默认的 ConfigDataEnvironmentPostProcessor
     *  也会解析 yml 和 properties ，所以就会造成重复的解析，目前有解决的方式但是觉得不太优雅，所以暂时这个地方先搁置
     *  > 这个比较不优雅的方式就是：在 EnvironmentPostProcess 的实现类：AssImitateConfigContextInitializer 加 order 注解，
     *  > 目前 ConfigDataEnvironmentPostProcess 的 order 是 Integer.MAX_VALUE + 10 , 所以只要比这个在往后一点，就可以从 environment 获取 spring.application.name
     */

    private EnvMeta initEnvMeta() {
        return new EnvMeta().setEnv(EnvTypeEnum.LOCCAL.getCode())
                .setNamespace("xp-ass")
                .setAppId("xp-ass-imitate");
    }

}
